// 指定当前类所属的包路径，用于组织项目结构
package com.example.springboot.service.impl;
// 导入所需的类和工具包
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.springboot.entity.Repair;
import com.example.springboot.mapper.RepairMapper;
import com.example.springboot.service.RepairService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

// @Service：声明当前类是 Spring 管理的服务层组件，自动注册到 Spring 容器中
@Service
// 继承 ServiceImpl 实现服务层接口，泛型参数为 Mapper 接口和实体类
public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> implements RepairService {

    /**
     * 注入 DAO 层对象（通过 J2EE 标准的 @Resource 注解实现依赖注入）
     * @Resource 默认为按名称注入，这里注入 RepairMapper 接口的实现类
     */
    @Resource
    private RepairMapper repairMapper;

    /**
     * 新增报修订单
     * @param repair 待新增的报修订单实体对象
     * @return 影响的行数（成功返回 1，失败返回 0）
     */
    @Override// 标识重写父类方法
    public int addNewOrder(Repair repair) {
        // 执行插入操作（调用 MyBatis-Plus 基础 Mapper 的插入方法）
        int insert = repairMapper.insert(repair);
        return insert;
    }

    /**
     * 分页查询报修订单（模糊查询）
     * @param pageNum 当前页码
     * @param pageSize 每页显示记录数
     * @param search 搜索关键词（订单标题）
     * @return 分页结果对象（包含总记录数和当前页数据）
     */
    @Override
    public Page find(Integer pageNum, Integer pageSize, String search) {
        // 创建分页对象（传入页码和每页大小）
        Page page = new Page<>(pageNum, pageSize);
        // 创建查询条件构造器
        QueryWrapper<Repair> qw = new QueryWrapper<>();
        // 添加条件：标题（title）模糊匹配搜索词
        qw.like("title", search);
        // 执行分页查询（调用 Mapper 的分页查询方法）
        Page orderPage = repairMapper.selectPage(page, qw);
        return orderPage;
    }
    /**
     * 个人报修订单分页查询（按标题模糊搜索 + 报修人姓名精确查询）
     * @param pageNum 当前页码
     * @param pageSize 每页显示记录数
     * @param search 搜索关键词（订单标题）
     * @param name 报修人姓名（用于精确匹配）
     * @return 分页结果对象（包含符合条件的个人订单）
     */
    @Override
    public Page individualFind(Integer pageNum, Integer pageSize, String search, String name) {
        // 创建分页对象
        Page page = new Page<>(pageNum, pageSize);
        // 创建查询条件构造器
        QueryWrapper<Repair> qw = new QueryWrapper<>();
        // 添加标题模糊查询条件
        qw.like("title", search);
        // 添加报修人姓名精确查询条件（eq：等于）
        qw.eq("repairer", name);
        // 执行分页查询（筛选出标题包含搜索词且报修人为指定姓名的订单）
        Page orderPage = repairMapper.selectPage(page, qw);
        return orderPage;
    }

    /**
     * 更新报修订单信息（根据 ID 更新）
     * @param repair 包含更新后数据的报修订单实体对象（需包含 ID）
     * @return 影响的行数（成功返回 1，失败返回 0）
     */
    @Override
    public int updateNewOrder(Repair repair) {
        // 执行更新操作（调用 MyBatis-Plus 基础 Mapper 的根据 ID 更新方法）
        int i = repairMapper.updateById(repair);
        return i;
    }

    /**
     * 删除报修订单（根据订单 ID 删除）
     * @param id 待删除订单的 ID
     * @return 影响的行数（成功返回 1，失败返回 0）
     */
    @Override
    public int deleteOrder(Integer id) {
        // 执行删除操作（调用 MyBatis-Plus 基础 Mapper 的根据 ID 删除方法）
        int i = repairMapper.deleteById(id);
        return i;
    }

    /**
     * 首页顶部：报修订单统计（获取所有订单总数）
     * @return 报修订单总数
     */
    @Override
    public int showOrderNum() {
        // 创建空查询条件构造器（查询所有记录）
        QueryWrapper<Repair> qw = new QueryWrapper<>();
        // 执行统计查询（返回总记录数，转为 int 类型）
        int orderCount = Math.toIntExact(repairMapper.selectCount(qw));
        return orderCount;
    }
}
